<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="GeoFramework" targetNamespace="http://geoframeworks.com" elementFormDefault="qualified" xmlns="http://geoframeworks.com" xmlns:mstns="http://geoframeworks.com" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:simpleType name="DistanceUnit">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Meters" />
      <xs:enumeration value="Centimeters" />
      <xs:enumeration value="Feet" />
      <xs:enumeration value="Inches" />
      <xs:enumeration value="Kilometers" />
      <xs:enumeration value="NauticalMiles" />
      <xs:enumeration value="StatuteMiles" />
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="Distance">
    <xs:simpleContent>
      <xs:extension base="xs:double">
        <xs:attribute name="Units" type="DistanceUnit" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:simpleType name="Angle">
    <xs:restriction base="xs:double" />
  </xs:simpleType>
  <xs:simpleType name="Azimuth">
    <xs:restriction base="xs:double" />
  </xs:simpleType>
  <xs:simpleType name="Elevation">
    <xs:restriction base="xs:double" />
  </xs:simpleType>
  <xs:simpleType name="Latitude">
    <xs:restriction base="xs:double" />
  </xs:simpleType>
  <xs:simpleType name="Longitude">
    <xs:restriction base="xs:double" />
  </xs:simpleType>
  <xs:complexType name="Speed">
    <xs:simpleContent>
      <xs:extension base="xs:double">
        <xs:attribute name="Units" type="SpeedUnit" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:simpleType name="SpeedUnit">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Knots" />
      <xs:enumeration value="MetersPerSecond" />
      <xs:enumeration value="StatuteMilesPerHour" />
      <xs:enumeration value="KilometersPerHour" />
      <xs:enumeration value="KilometersPerSecond" />
      <xs:enumeration value="FeetPerSecond" />
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="Position">
    <xs:sequence>
      <xs:element name="Latitude" type="Latitude" minOccurs="1" maxOccurs="1" />
      <xs:element name="Longitude" type="Longitude" minOccurs="1" maxOccurs="1" />
      <xs:element name="ZoneLetter" type="xs:string" minOccurs="0" maxOccurs="1" />
      <xs:element name="ZoneNumber" type="xs:int" minOccurs="0" maxOccurs="1" />
      <xs:element name="Easting" type="Distance" minOccurs="0" maxOccurs="1" />
      <xs:element name="Northing" type="Distance" minOccurs="0" maxOccurs="1" />
    </xs:sequence>
    <xs:attribute name="Datum" type="xs:string" />
  </xs:complexType>
  <xs:simpleType name="AreaUnit">
    <xs:restriction base="xs:string">
      <xs:enumeration value="SquareMeters" />
      <xs:enumeration value="SquareCentimeters" />
      <xs:enumeration value="SquareFeet" />
      <xs:enumeration value="SquareInches" />
      <xs:enumeration value="SquareKilometers" />
      <xs:enumeration value="SquareNauticalMiles" />
      <xs:enumeration value="SquareStatuteMiles" />
      <xs:enumeration value="Acres" />
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="Area">
    <xs:simpleContent>
      <xs:extension base="xs:double">
        <xs:attribute name="Units" type="AreaUnit" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="CartesianPoint">
    <xs:sequence>
      <xs:element name="X" type="Distance" minOccurs="1" maxOccurs="1" />
      <xs:element name="Y" type="Distance" minOccurs="1" maxOccurs="1" />
      <xs:element name="Z" type="Distance" minOccurs="1" maxOccurs="1" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Ellipsoid">
    <xs:sequence>
      <xs:element name="PolarRadius" type="Distance" minOccurs="1" maxOccurs="1" />
      <xs:element name="EquatorialRadius" type="Distance" minOccurs="1" maxOccurs="1" />
      <xs:element name="Flattening" type="xs:double" minOccurs="0" maxOccurs="1" />
      <xs:element name="InverseFlattening" type="xs:double" minOccurs="0" maxOccurs="1" />
      <xs:element name="Eccentricity" type="xs:double" minOccurs="0" maxOccurs="1" />
      <xs:element name="EccentricitySquared" type="xs:double" minOccurs="0" maxOccurs="1" />
    </xs:sequence>
    <xs:attribute name="Name" type="xs:string" />
  </xs:complexType>
  <xs:complexType name="Datum">
    <xs:sequence>
      <xs:element name="Ellipsoid" type="Ellipsoid" minOccurs="1" />
    </xs:sequence>
    <xs:attribute name="Name" type="xs:string" />
  </xs:complexType>
  <xs:complexType name="GeographicSize">
    <xs:sequence>
      <xs:element name="Width" type="Angle" maxOccurs="1" minOccurs="1" />
      <xs:element name="Height" type="Angle" maxOccurs="1" minOccurs="1" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="GeographicRectangle">
    <xs:sequence>
      <xs:element name="Top" type="Latitude" maxOccurs="1" minOccurs="1" />
      <xs:element name="Left" type="Longitude" maxOccurs="1" minOccurs="1" />
      <xs:element name="Bottom" type="Latitude" maxOccurs="1" minOccurs="1" />
      <xs:element name="Right" type="Longitude" maxOccurs="1" minOccurs="1" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="PointD">
    <xs:sequence>
      <xs:element name="X" type="xs:double" minOccurs="1" maxOccurs="1" />
      <xs:element name="Y" type="xs:double" maxOccurs="1" minOccurs="1" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="PolarCoordinate">
    <xs:sequence>
      <xs:element name="R" type="xs:float" minOccurs="1" maxOccurs="1" />
      <xs:element name="Theta" type="Angle" maxOccurs="1" minOccurs="1" />
      <xs:element name="Origin" type="Azimuth" maxOccurs="1" minOccurs="0" default="0" />
      <xs:element name="Orientation" type="PolarCoordinateOrientation" maxOccurs="1" minOccurs="0" default="Clockwise" />
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="PolarCoordinateOrientation">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Clockwise" />
      <xs:enumeration value="CounterClockwise" />
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="PositionCollection">
    <xs:sequence>
      <xs:element name="Position" type="Position" minOccurs="0" />
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="Radian">
    <xs:restriction base="xs:double" />
  </xs:simpleType>
  <xs:complexType name="RectangleD">
    <xs:sequence>
      <xs:element name="Top" type="xs:double" maxOccurs="1" minOccurs="1" />
      <xs:element name="Left" type="xs:double" maxOccurs="1" minOccurs="1" />
      <xs:element name="Bottom" type="xs:double" minOccurs="1" maxOccurs="1" />
      <xs:element name="Right" type="xs:double" maxOccurs="1" minOccurs="1" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Segment">
    <xs:sequence>
      <xs:element name="Start" type="Position" minOccurs="1" maxOccurs="1" />
      <xs:element name="End" type="Position" maxOccurs="1" minOccurs="1" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="SizeD">
    <xs:sequence>
      <xs:element name="X" type="xs:double" minOccurs="1" maxOccurs="1" />
      <xs:element name="Y" type="xs:double" maxOccurs="1" minOccurs="1" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>